package com.project.web.order.model.app.vo;

import com.project.web.order.model.app.MbrH5Order;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 会员订单支付VO对象
 *
 * @Author: wyy
 * @Date: 2/2/21 10:48 PM
 */
@Data
@ApiModel("会员订单支付VO对象")
public class MbrOrderPayVO {

    /**
     * 订单类型 0：课程订单 1：商品订单
     */
    @ApiModelProperty("订单类型 0：课程订单 1：商品订单")
    private Integer orderType;

    /**
     * 微信openId[公众号/小程序]
     */
    @ApiModelProperty("微信openId[公众号/小程序]")
    private String openId;

    /**
     * 用户ID
     */
    @ApiModelProperty("用户Id")
    private String userId;

    /**
     * 课程类目Id
     */
    @ApiModelProperty("课程类目Id")
    private String courseCategoryId;

    /**
     * 商品Id
     */
    @ApiModelProperty("商品Id")
    private Long productId;

    /**
     * 实付金额
     */
    @ApiModelProperty("实付金额")
    private BigDecimal actualAmt;

    /**
     * 总金额
     */
    @ApiModelProperty("总金额")
    private BigDecimal totalAmt;

    /**
     * 市场价格
     */
    @ApiModelProperty("市场价格")
    private BigDecimal marketPrice;

    /**
     * 售卖价格
     */
    @ApiModelProperty("售卖价格")
    private BigDecimal sellPrice;

    /**
     * 订单号
     */
    @ApiModelProperty("订单号")
    private String orderNo;

    /**
     * 支付方式
     * 1：微信App支付
     * 2：支付宝App支付
     * 3:微信公众号支付
     */
    @ApiModelProperty("支付方式 1：微信App支付 2：支付宝App支付 3:微信公众号支付 4:小程序支付")
    private Integer payMode;

    /**
     * 订单类型 0：课程订单 1：商品订单
     */
    public enum ORDER_TYPE_ENUM {
        COURSE_ORDER("课程订单", 0),
        PRODUCT_ORDER("商品订单", 1);

        /**
         * 枚举名称
         */
        private String name;

        /**
         * 枚举值
         */
        private Integer value;

        /**
         * 枚举有参构造函数
         *
         * @param value 枚举值
         * @param name  枚举名
         */
        ORDER_TYPE_ENUM(String name, Integer value) {
            this.value = value;
            this.name = name;
        }

        /**
         * 根据类型值获取类型名称
         *
         * @param value
         * @return 枚举名称
         */
        public String getName(Integer value) {
            // 判断值是否为空
            if (value == null) {
                return "";
            }

            // 循环取出订单类型名称
            for (MbrH5Order.ORDER_CHANNEL_ENUM orderChannelEnum : MbrH5Order.ORDER_CHANNEL_ENUM.values()) {
                if (orderChannelEnum.getValue().equals(value)) {
                    return orderChannelEnum.getName();
                }
            }
            return "";
        }

        public String getName() {
            return name;
        }

        /**
         * 设置枚举名称
         */
        public void setName(String name) {
            this.name = name;
        }

        /**
         * 获取类型值
         */
        public Integer getValue() {
            return value;
        }

        /**
         * 设置类型值
         */
        public void setValue(Integer value) {
            this.value = value;
        }
    }

}
